<template>
  <div class="trade-container">
    <h3 class="title">填写并核对订单信息</h3>
    <div class="content">
      <h5 class="receive">收件人信息</h5>
      <a href="javascript:;" style="float: right" @click="addAddress"
        >新增收件人地址</a
      >
      <!-- 收获地址信息 -->
      <div
        class="address clearFix"
        :key="Address.id"
        v-for="Address in userAddressList"
      >
        <span
          class="username"
          :class="{ selected: Address.isDefault === '1' }"
          @click="setDefault(Address)"
          >{{ Address.consignee }}</span
        >
        <p>
          <!--地址-->
          <span class="s1">{{ Address.userAddress }}</span>
          <!--手机号-->
          <span class="s2">{{ Address.phoneNum }}</span>
          <!--是否是默认地址-->
          <span class="s3" v-if="Address.isDefault === '1'">默认地址</span>
        </p>
        <div style="float: right">
          <a
            href="javascript:;"
            style="margin-right: 10px"
            @click="updateAddress(Address)"
            >修改</a
          >
          <a href="javascript:;" @click="deleteAddress(Address.id)">删除</a>
        </div>
      </div>
      <!-- 收获地址信息 -->
      <div class="line"></div>
      <h5 class="pay">支付方式</h5>
      <div class="address clearFix">
        <span class="username selected">在线支付</span>
        <span class="username" style="margin-left: 5px">货到付款</span>
      </div>
      <div class="line"></div>
      <h5 class="pay">送货清单</h5>
      <div class="way">
        <h5>配送方式</h5>
        <div class="info clearFix">
          <span class="s1">天天快递</span>
          <p>配送时间：预计8月10日（周三）09:00-15:00送达</p>
        </div>
      </div>
      <!-- 商家的商品信息 -->
      <div class="detail">
        <h5>商品清单</h5>
        <ul
          class="list clearFix"
          v-for="(item, index) in tradeInfo.detailArrayList"
          :key="item.skuId"
        >
          <!--商品的图片-->
          <li>
            <!--自己做详情页的跳转-->
            <img
              :src="item.imgUrl"
              :alt="item.skuName"
              style="width: 100px; height: 100px"
            />
          </li>
          <!--优惠券-->
          <li class="activity">
            <div class="goods-suit-tit" v-if="item.activityRule !== null">
              <template
                v-if="item.activityRule.activityType === 'FULL_REDUCTION'"
              >
                <strong
                  >满{{ item.activityRule.conditionAmount }}元减{{
                    item.activityRule.benefitAmount
                  }}元</strong
                >
                <span class="ml20"
                  >&nbsp;返现：<em
                    >{{ item.activityRule.benefitAmount }}元</em
                  ></span
                >
              </template>
              <template
                v-if="item.activityRule.activityType === 'FULL_DISCOUNT'"
              >
                <strong
                  >满{{ item.activityRule.conditionNum }}件打{{
                    item.activityRule.benefitDiscount
                  }}折</strong
                >
                <span class="ml20">
                  &nbsp;打折：<em
                    >{{ item.activityRule.benefitDiscount }}折</em
                  ></span
                >
              </template>
            </div>
            <p>{{ item.skuName }}</p>
            <h4>7天无理由退货</h4>
          </li>
          <!--总价格-->
          <li>
            <h3>￥{{ item.orderPrice }}</h3>
          </li>
          <!--数量-->
          <li>X{{ item.skuNum }}</li>
          <!--库存-->
          <li>有货</li>
        </ul>
      </div>
      <div class="bbs">
        <h5>买家留言：</h5>
        <textarea
          placeholder="建议留言前先与商家沟通确认"
          class="remarks-cont"
          v-model="orderComment"
        ></textarea>
      </div>
      <div class="line"></div>
      <!-- 发票信息区域 -->
      <div class="linkInfo">
        <div class="step-tit">
          <h5>发票信息</h5>
        </div>
        <div class="step-cont">
          <span>普通发票（电子）</span>
          <span>个人</span>
          <span>明细</span>
        </div>
      </div>
      <!-- 优惠券选择区域 -->
      <div class="cardInfo">
        <div class="step-tit">
          <h5>使用优惠/抵用</h5>
          <div class="coupon-enable">
            <div
              class="c-detail"
              :class="couponInfoIndex === index ? 'item-selected' : ''"
              v-for="(couponInfo, index) in tradeInfo.couponInfoList"
              :key="couponInfo.id"
              @click="
                setCouponInfoIndex(
                  index,
                  couponInfo.benefitAmount,
                  couponInfo.benefitDiscount
                )
              "
            >
              <div class="c-msg c-dong c-nopointer">
                <div class="c-top-dong"></div>
                <div class="c-price">
                  <!-- <em>50元</em> -->
                  <em v-if="couponInfo.couponType === 'FULL_REDUCTION'"
                    >{{ couponInfo.benefitAmount }}元</em
                  >
                  <em v-else-if="couponInfo.couponType === 'CASH'"
                    >{{ couponInfo.benefitAmount }}元</em
                  >
                  <em v-else-if="couponInfo.couponType === 'FULL_DISCOUNT'"
                    >{{ couponInfo.benefitDiscount }}折</em
                  >
                  <em v-else-if="couponInfo.couponType === 'DISCOUNT'"
                    >{{ couponInfo.benefitDiscount }}折</em
                  >
                  <!-- <em>8折</em>
                  <em>67元</em>
                  <em>9折</em> -->
                </div>
                <div class="c-limit">
                  <span v-if="couponInfo.couponType === 'FULL_REDUCTION'"
                    >满减卷</span
                  >
                  <span v-else-if="couponInfo.couponType === 'CASH'"
                    >现金券</span
                  >
                  <span v-else-if="couponInfo.couponType === 'FULL_DISCOUNT'"
                    >满件打折券</span
                  >
                  <span v-else-if="couponInfo.couponType === 'DISCOUNT'"
                    >折扣券</span
                  >
                  <!-- <span> 现金券</span> -->
                  <!-- <span>折扣券</span>
                  <span> 67元</span>
                  <span>32件</span> -->
                </div>
                <div class="c-time c-time-dong">
                  <span>有效期至{{ couponInfo.expireTime }}</span>
                </div>
              </div>
              <div class="c-type c-type-dong">
                <span class="c-type-l">[东券]</span>
                <span class="c-type-r">[限品类]</span>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
    <!-- 订单优惠信息区域 -->
    <div class="order-summary">
      <div class="static fr">
        <div class="list">
          <span
            ><i class="number">{{ tradeInfo.totalNum }}</i
            >件商品，总商品金额</span
          >
          <em class="allprice">¥{{ tradeInfo.totalAmount }}元</em>
        </div>
        <div class="list">
          <span>运费：</span>
          <em class="transport">¥0元</em>
        </div>
        <div class="list">
          <span>返现：</span>
          <em class="money">¥0元</em>
        </div>
        <div class="list" v-if="benefitAmount != null">
          <span>优惠券：</span>
          <em class="transport">¥{{ benefitAmount }}元</em>
        </div>
        <div class="list" v-if="benefitDiscount !== null">
          <span>折扣券：</span>
          <em class="transport">{{ benefitDiscount }}折</em>
        </div>
        <div
          class="list"
          v-if="benefitDiscount === null && benefitAmount === null"
        >
          <span>优惠券：</span>
          <em class="transport">¥{{ benefitAmount }}元</em>
        </div>
      </div>
    </div>
    <div class="trade">
      <div class="price">
        应付金额:<span
          >¥{{
            benefitAmount
              ? tradeInfo.totalAmount - benefitAmount
              : benefitDiscount
              ? (tradeInfo.totalAmount * benefitDiscount) / 10
              : tradeInfo.totalAmount
          }}</span
        >
      </div>
      <div class="receiveInfo">
        寄送至:
        <span>{{ selectedAddress.fullAddress }}</span>
        收货人：<span>{{ selectedAddress.consignee }}</span>
        <span>{{ selectedAddress.phoneNum }}</span>
      </div>
    </div>
    <div class="sub clearFix">
      <!-- <router-link  to="/pay">提交订单</router-link> -->
      <a href="javascript:;" @click="toSubmitOrder" class="subBtn">提交订单</a>
    </div>
  </div>
</template>

<script>
import { mapGetters, mapState } from "vuex";
export default {
  name: "Trade",
  data() {
    return {
      couponInfoIndex: null, // 用来存储选中的优惠券的高亮显示的标识
      benefitAmount: null, // 满减的金额
      benefitDiscount: null, // 折扣的值
      orderComment: "", //商家留言
    };
  },
  mounted() {
    //1.获取用户地址信息
    this.getUserInfoAddressList();
    //2.获取订单信息
    this.getTradeInfo();
  },
  computed: {
    ...mapState({
      //订单信息
      tradeInfo: (state) => state.Order.tradeInfo,
      //用户地址信息
      userAddressList: (state) => state.user.userAddressList,
    }),
    // 获取默认的选中的地址信息对象
    selectedAddress() {
      return (
        this.userAddressList.find((address) => address.isDefault === "1") || {}
      );
    },
  },

  methods: {
    //修改默认地址
    setDefault(address) {
      //排他
      this.userAddressList.forEach((item) => (item.isDefault = "0"));
      //设置当前默认地址
      address.isDefault = "1";
    },
    //新增地址
    addAddress() {
      this.address = this.$address();
      //点击modal取消按钮时
      this.address.cancel = () => {
        this.address.clear(); //清空数据
        this.address.unmount(); //隐藏组件
      };

      this.address.confirm = async (formData) => {
        //调用添加地址的接口
        const result = await this.$API.reqAddUserAddress(formData);
        if (result.code !== 200) {
          this.$message.error("添加地址失败");
          this.address.clear();
          return;
        }
        this.$message.success("添加地址成功了啦");
        this.address.clear(); //清空数据
        this.address.unmount(); //隐藏组件
        //重新获取地址列表
        this.getUserInfoAddressList();
      };
    },
    //修改地址
    updateAddress(Updateaddress) {
      this.address = this.$address();
      this.address.cancel = () => {
        this.address.clear(); //清空数据
        this.address.unmount(); //隐藏组件
      };

      this.address.confirm = async (formData) => {
        const result = await this.$API.reqUpdateUserAddress(formData);
        if (result.code !== 200) {
          this.$message.error("修改地址失败了");
          return;
        }
        this.$message.success("修改地址成功了啦");
        this.address.clear(); //清空数据
        this.address.unmount(); //隐藏组件
        //重新获取地址列表
        this.getUserInfoAddressList();
      };
      this.address.formData = Updateaddress;
    },
    //删除地址
    delAddress(addressId) {
      this.$confirm("您确定要删除该地址吗?", "删除提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(async () => {
          const result = await this.$API.reqDelUserAddress(addressId);
          if (result.code !== 200) {
            this.$message.error("删除失败");
            return;
          }
          this.$message.success("删除成功");
          //重新获取数据
          this.getUserInfoAddressList();
        })
        .catch(() => {});
    },

    // 设置选中的优惠券的标识,及将来有一天要存储该券的优惠的折扣值或者是金额值
    setCouponInfoIndex(index, benefitAmount, benefitDiscount) {
      // 判断点击的这个券的索引值和之前存储的索引值是否一致
      if (this.couponInfoIndex === index) {
        this.couponInfoIndex = null;
        this.benefitAmount = null; // 清空满减的金额
        this.benefitDiscount = null; // 清空折扣的值
      } else {
        this.couponInfoIndex = index;
        this.benefitAmount = benefitAmount; // 清空满减的金额
        this.benefitDiscount = benefitDiscount; // 清空折扣的值
      }
    },

    //获取用户地址信息
    getUserInfoAddressList() {
      this.$store.dispatch("getUserAddressInfo");
    },
    //获取订单页信息数据
    getTradeInfo() {
      this.$store.dispatch("getTrade");
    },

    //提交订单操作[优惠券选中提交时未正常消耗掉]
    async toSubmitOrder() {
      //1.获取需要提交的数据
      let {
        tradeInfo: { tradeNo, detailArrayList, couponInfoList },
        selectedAddress: { consignee, phoneNum, fullAddress, provinceId },
        couponInfoIndex,
        orderComment,
      } = this;

      //2.处理优惠券的信息
      const selectCouponInfo = couponInfoList[couponInfoIndex];
      couponInfoList = selectCouponInfo ? [selectCouponInfo] : [];

      //3.对象数据拼接
      const submitData = {
        consignee, //收件人姓名
        consigneeTel: phoneNum, //收件人电话
        deliveryAddress: fullAddress, //收件地址
        paymentWay: "ONLINE", //支付方式
        orderComment, //订单备注
        orderDetailList: detailArrayList, //存储多个商品对象的数组
        provinceId, //省份id
        couponInfoList, //优惠券的信息
      };

      //2.调用接口
      const result = await this.$API.reqSubmitOrder(tradeNo, submitData);
      if (result.code === 200) {
        // 接口调用成功,获取订单的id,路由跳转---pay
        const orderId = result.data;
        this.$router.push({ path: "/pay", query: { orderId } });
      } else {
        this.$message.error(result.message || "提交订单失败了");
      }
    },
  },
};
</script>
<style lang="less" scoped>
.trade-container {
  .title {
    width: 1200px;
    margin: 0 auto;
    font-size: 14px;
    line-height: 21px;
  }

  .content {
    width: 1200px;
    margin: 10px auto 0;
    border: 1px solid rgb(221, 221, 221);
    padding: 25px;
    box-sizing: border-box;

    .pay {
      line-height: 36px;
      margin: 18px 0;
    }

    .receive {
      a {
        font-size: 12px;
        float: right;
        &:hover {
          color: #4cb9fc;
          text-decoration: underline;
        }
      }
    }
    .address {
      padding-left: 20px;
      margin-bottom: 15px;

      .username {
        float: left;
        width: 100px;
        height: 30px;
        line-height: 30px;
        text-align: center;
        border: 1px solid #ddd;
        position: relative;
      }

      .username::after {
        content: "";
        display: none;
        width: 13px;
        height: 13px;
        position: absolute;
        right: 0;
        bottom: 0;
        background: url(./images/choosed.png) no-repeat;
      }

      .username.selected {
        border-color: #e1251b;
      }

      .username.selected::after {
        display: block;
      }

      p {
        width: 610px;
        float: left;
        line-height: 30px;
        margin-left: 10px;
        padding-left: 5px;
        cursor: pointer;

        .s1 {
          float: left;
        }

        .s2 {
          float: left;
          margin: 0 5px;
        }

        .s3 {
          float: left;
          width: 56px;
          height: 24px;
          line-height: 24px;
          margin-left: 10px;
          background-color: #878787;
          color: #fff;
          margin-top: 3px;
          text-align: center;
        }
      }

      p:hover {
        background-color: #ddd;
      }
    }

    .line {
      height: 1px;
      background-color: #ddd;
    }

    .way {
      width: 1080px;
      height: 110px;
      background: #f4f4f4;
      padding: 15px;
      margin: 0 auto;

      h5 {
        line-height: 50px;
      }

      .info {
        margin-top: 20px;

        .s1 {
          float: left;
          border: 1px solid #ddd;
          width: 120px;
          height: 30px;
          line-height: 30px;
          text-align: center;
          margin-right: 10px;
        }

        p {
          line-height: 30px;
        }
      }
    }

    .detail {
      width: 1080px;
      padding: 15px;
      background: #f4f4f4;
      margin: 5px auto 0;

      h5 {
        line-height: 50px;
      }

      .list {
        display: flex;
        justify-content: space-between;
        background: #feedef;
        margin-bottom: 5px;
        .activity {
          width: 500px;
          strong {
            font-weight: bold;
          }
          .ml20 {
            margin-left: 20px;
            font-weight: 700;
            display: inline-block;
            border: 1px solid rgb(122, 189, 84);
            color: rgb(122, 189, 84);
            padding: 2px 5px;
          }
        }
        li {
          line-height: 30px;

          // p {
          //   margin-bottom: 20px;
          // }

          h4 {
            color: #c81623;
            font-weight: 400;
          }

          h3 {
            color: #e12228;
          }
        }
      }
    }

    .bbs {
      margin-bottom: 15px;

      h5 {
        line-height: 50px;
      }

      textarea {
        width: 100%;
        border-color: #e4e2e2;
        line-height: 1.8;
        outline: none;
        resize: none;
      }
    }

    .cardInfo {
      margin-bottom: 25px;
      .step-tit {
        line-height: 36px;
        margin: 15px 0;
        .coupon-enable {
          display: block;
          width: 920px;
          clear: both;
          margin-top: 10px;
          .c-detail {
            width: 200px;
            height: 120px;
            margin-left: 20px;
            margin-bottom: 20px;
            display: inline-block;
            &.item-selected {
              border: 2px solid #e43a3d;
              background-image: url(//misc.360buyimg.com/user/purchase/2.0.0/css/i/coupon-selected.png);
              background-repeat: no-repeat;
              background-position: bottom right;
            }
            .c-nopointer {
              cursor: default !important;
              background-color: rgb(116, 210, 212);
              height: 85px;
              width: 100%;
              position: relative;
              border-left: 0;
              border-right: 0;
              .c-top-dong {
                height: 3px;
                width: 100%;
                background: #fff
                  url(https://misc.360buyimg.com/user/purchase/2.0.0/css/i/virtual-spite.png) -36px -6px
                  no-repeat;
              }
              .c-price {
                color: #fff;
                font: 24px Arial, Verdana, "Microsoft YaHei", SimSun;
                display: inline;
                position: relative;
                top: 8px;
                margin-left: 12px;
                vertical-align: bottom;
                cursor: default !important;
              }
              .c-limit {
                color: #f5f5f5;
                font-size: 12px;
                display: inline;
                position: relative;
                top: 7px;
              }
              .c-time {
                padding-left: 12px;
                margin-top: 10px;
              }
            }
            .c-type {
              color: #74d2d4;
              border: 1px solid #cef0f1;
              width: 100%;
              box-sizing: border-box;
              .c-type-l {
                margin: 0 5px 0 12px;
              }
              .c-type-r {
                margin: 0;
                cursor: pointer;
              }
            }
          }
        }
      }
    }
  }

  .order-summary {
    width: 1200px;
    overflow: hidden;
    padding-right: 20px;
    margin: 20px auto 0;
    .static {
      float: right;
      .list {
        line-height: 26px;
        span {
          float: left;
          width: 160px;
          .number {
            color: red;
          }
        }
        em {
          font-family: "微软雅黑";
        }
      }
    }
  }

  .trade {
    box-sizing: border-box;
    width: 1200px;
    padding: 10px;
    margin: 10px auto;
    text-align: right;
    background-color: #f4f4f4;
    border: 1px solid #ddd;

    div {
      line-height: 30px;
    }

    .price span {
      color: #e12228;
      font-weight: 700;
      font-size: 14px;
    }

    .receiveInfo {
      color: #999;
    }
  }

  .sub {
    width: 1200px;
    margin: 0 auto 10px;

    .subBtn {
      float: right;
      width: 164px;
      height: 56px;
      font: 700 18px "微软雅黑";
      line-height: 56px;
      text-align: center;
      color: #fff;
      background-color: #e1251b;
    }
  }
}
</style>